package com.maibow.service.admin;

import java.util.List;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import com.maibow.dao.DaoSupport;
import com.maibow.entity.admin.Module;
import com.maibow.entity.admin.OperPrivilege;
import com.maibow.entity.admin.RoleOperPrivilege;
import com.maibow.util.PageData;

@Service("moduleService")
public class ModuleService {

    @Resource(name = "daoSupport")
    private DaoSupport dao;

    /**
     * 
     * listAllParentModule(这里用一句话描述这个方法的作用)
     * (这里描述这个方法适用条件 – 可选)
     * 标记：@return
     * 标记：@throws Exception
     * 返回值：List<Module>
     * 作者：吴比(Wubi)
     * 
     * @exception
     * @since 1.0.0
     */
    public List<Module> listAllParentModule() throws Exception {
        return (List<Module>) dao.findForList("ModuleMapper.listAllParentModule", null);
    }

    /**
     * 取最大id
     * findMaxId(这里用一句话描述这个方法的作用)
     * (这里描述这个方法适用条件 – 可选)
     * 标记：@param pd
     * 标记：@return
     * 标记：@throws Exception
     * 返回值：PageData
     * 作者：吴比(Wubi)
     * 
     * @exception
     * @since 1.0.0
     */
    public PageData findMaxId(PageData pageData) throws Exception {
        return (PageData) dao.findForObject("ModuleMapper.findMaxModuleId", pageData);
    }

    /**
     * 
     * getModuleById(这里用一句话描述这个方法的作用)
     * (这里描述这个方法适用条件 – 可选)
     * 标记：@param pageData
     * 标记：@return
     * 标记：@throws Exception
     * 返回值：PageData
     * 作者：吴比(Wubi)
     * 
     * @exception
     * @since 1.0.0
     */
    public PageData getModuleById(PageData pageData) throws Exception {
        return (PageData) dao.findForObject("ModuleMapper.getModuleById", pageData);
    }

    /**
     * 
     * saveModule(这里用一句话描述这个方法的作用)
     * (这里描述这个方法适用条件 – 可选)
     * 标记：@param module
     * 标记：@throws Exception
     * 返回值：void
     * 作者：吴比(Wubi)
     * 
     * @exception
     * @since 1.0.0
     */
    public void saveModule(Module module) throws Exception {
        dao.save("ModuleMapper.insertModule", module);
    }

    /**
     * 
     * edit(编辑)
     * (这里描述这个方法适用条件 – 可选)
     * 标记：@param pageData
     * 标记：@return
     * 标记：@throws Exception
     * 返回值：PageData
     * 作者：吴比(Wubi)
     * 
     * @exception
     * @since 1.0.0
     */
    public PageData edit(PageData pageData) throws Exception {
        return (PageData) dao.findForObject("ModuleMapper.updateModule", pageData);
    }

    /**
     * 
     * editIcon(保存菜单图标 (顶部菜单))
     * (这里描述这个方法适用条件 – 可选)
     * 标记：@param pageData
     * 标记：@return
     * 标记：@throws Exception
     * 返回值：PageData
     * 作者：吴比(Wubi)
     * 
     * @exception
     * @since 1.0.0
     */
    public PageData editIcon(PageData pageData) throws Exception {
        return (PageData) dao.findForObject("ModuleMapper.editIcon", pageData);
    }

    /**
     * 
     * listSubModuleByParentId(这里用一句话描述这个方法的作用)
     * (这里描述这个方法适用条件 – 可选)
     * 标记：@param parentId
     * 标记：@return
     * 标记：@throws Exception
     * 返回值：List<Module>
     * 作者：吴比(Wubi)
     * 
     * @exception
     * @since 1.0.0
     */
    public List<Module> listSubModuleByParentId(Integer parentmoduleid) throws Exception {
        return (List<Module>) dao.findForList("ModuleMapper.listSubModuleByParentId", parentmoduleid);
    }

    /**
     * 
     * deleteModuleById(这里用一句话描述这个方法的作用)
     * (这里描述这个方法适用条件 – 可选)
     * 标记：@param moduleid
     * 标记：@throws Exception
     * 返回值：void
     * 作者：吴比(Wubi)
     * 
     * @exception
     * @since 1.0.0
     */
    public void deleteModuleById(Integer moduleid) throws Exception {
        dao.save("ModuleMapper.deleteModuleById", moduleid);
    }

    /**
     * 
     * listAllModule(这里用一句话描述这个方法的作用)
     * (这里描述这个方法适用条件 – 可选)
     * 标记：@return
     * 标记：@throws Exception
     * 返回值：List<Menu>
     * 作者：吴比(Wubi)
     * 
     * @exception
     * @since 1.0.0
     */
    public List<Module> listAllModule() throws Exception {
        // 得到所有模块
        List<Module> parentModuleList = this.listAllParentModule();
        for (Module module : parentModuleList) {
            // 循环父级模块得到子模块
            List<Module> subModuleList = this.listSubModuleByParentId(module.getModuleid());
            module.setSubmodule(subModuleList);
            module.setModuletreeid(module.getModuleid().toString());

            // 得到所有父级模块有关的操作权限，如果有的话
            List<OperPrivilege> operPrivilegeList = this.queryAllOperPrivilegeByModuleId(module.getModuleid());
            module.setOperprivileges(operPrivilegeList);

            // 循环所有子模块
            for (Module subModule : subModuleList) {
                // 得到所有子模块有关的操作权限
                List<OperPrivilege> subModuleOperPrivilegeList = this.queryAllOperPrivilegeByModuleId(subModule.getModuleid());
                subModule.setOperprivileges(subModuleOperPrivilegeList);
                subModule.setModuletreeid(subModule.getModuleid().toString());
            }
        }
        return parentModuleList;
    }

    /**
     * 
     * listAllOperPrivilege(这里用一句话描述这个方法的作用)
     * (这里描述这个方法适用条件 – 可选)
     * 标记：@param moduleid
     * 标记：@return
     * 标记：@throws Exception
     * 返回值：List<OperPrivilege>
     * 作者：吴比(Wubi)
     * 
     * @exception
     * @since 1.0.0
     */
    public List<OperPrivilege> listAllOperPrivilege(Integer moduleid) throws Exception {
        return (List<OperPrivilege>) dao.findForList("ModuleMapper.listAllOperPrivilege", moduleid);
    }

    /**
     * 
     * saveOperPrivilege(这里用一句话描述这个方法的作用)
     * (这里描述这个方法适用条件 – 可选)
     * 标记：@param operPrivilege
     * 标记：@throws Exception
     * 返回值：void
     * 作者：吴比(Wubi)
     * 
     * @exception
     * @since 1.0.0
     */
    public void saveOperPrivilege(OperPrivilege operPrivilege) throws Exception {
        dao.save("ModuleMapper.insertOperPrivilege", operPrivilege);
    }

    /**
     * 
     * findOperPrivilegeMaxId(这里用一句话描述这个方法的作用)
     * (这里描述这个方法适用条件 – 可选)
     * 标记：@param pageData
     * 标记：@return
     * 标记：@throws Exception
     * 返回值：PageData
     * 作者：吴比(Wubi)
     * 
     * @exception
     * @since 1.0.0
     */
    public PageData findOperPrivilegeMaxId(PageData pageData) throws Exception {
        return (PageData) dao.findForObject("ModuleMapper.findOperPrivilegeMaxId", pageData);
    }

    /**
     * 
     * getOperPrivilegeById(这里用一句话描述这个方法的作用)
     * (这里描述这个方法适用条件 – 可选)
     * 标记：@param pageData
     * 标记：@return
     * 标记：@throws Exception
     * 返回值：PageData
     * 作者：吴比(Wubi)
     * 
     * @exception
     * @since 1.0.0
     */
    public PageData getOperPrivilegeById(PageData pageData) throws Exception {
        return (PageData) dao.findForObject("ModuleMapper.getOperPrivilegeById", pageData);
    }

    /**
     * 
     * editOperPrivilege(这里用一句话描述这个方法的作用)
     * (这里描述这个方法适用条件 – 可选)
     * 标记：@param pageData
     * 标记：@return
     * 标记：@throws Exception
     * 返回值：PageData
     * 作者：吴比(Wubi)
     * 
     * @exception
     * @since 1.0.0
     */
    public PageData editOperPrivilege(PageData pageData) throws Exception {
        return (PageData) dao.findForObject("ModuleMapper.updateOperPrivilege", pageData);
    }

    /**
     * 
     * deleteOperPrivilegeById(这里用一句话描述这个方法的作用)
     * (这里描述这个方法适用条件 – 可选)
     * 标记：@param operPrivilegeId
     * 标记：@throws Exception
     * 返回值：void
     * 作者：吴比(Wubi)
     * 
     * @exception
     * @since 1.0.0
     */
    public void deleteOperPrivilegeById(Integer operPrivilegeId) throws Exception {
        dao.save("ModuleMapper.deleteOperPrivilegeById", operPrivilegeId);
    }

    /**
     * 
     * queryAllRolesByModuleId(这里用一句话描述这个方法的作用)
     * (这里描述这个方法适用条件 – 可选)
     * 标记：@param moduleid
     * 标记：@return
     * 标记：@throws Exception
     * 返回值：List<PageData>
     * 作者：吴比(Wubi)
     * 
     * @exception
     * @since 1.0.0
     */
    public List<PageData> queryAllRolesByModuleId(Integer moduleid) throws Exception {
        return (List<PageData>) dao.findForList("ModuleMapper.queryAllRolesByModuleId", moduleid);
    }

    /**
     * 
     * @param moduleid
     * @return
     * @throws Exception
     */
    public List<RoleOperPrivilege> queryAllOperPrivilegeRelaByModuleId(Integer moduleid) throws Exception {
        return (List<RoleOperPrivilege>) dao.findForList("ModuleMapper.queryAllOperPrivilegeRelaByModuleId", moduleid);
    }

    /**
     * 
     * queryAllOperPrivilegeByModuleId(
     * 这里用一句话描述这个方法的作用)
     * (这里描述这个方法适用条件 – 可选)
     * 标记：@param moduleid
     * 标记：@return
     * 标记：@throws Exception
     * 返回值：List<PageData>
     * 作者：吴比(Wubi)
     * 
     * @exception
     * @since 1.0.0
     */
    public List<OperPrivilege> queryAllOperPrivilegeByModuleId(Integer moduleid) throws Exception {
        return (List<OperPrivilege>) dao.findForList("ModuleMapper.queryAllOperPrivilegeByModuleId", moduleid);
    }

    /**
     * 
     * deleteOperPrivilegeByModuleId(
     * 这里用一句话描述这个方法的作用)
     * (这里描述这个方法适用条件 – 可选)
     * 标记：@param moduleid
     * 标记：@throws Exception
     * 返回值：void
     * 作者：吴比(Wubi)
     * 
     * @exception
     * @since 1.0.0
     */
    public void deleteOperPrivilegeByModuleId(Integer moduleid) throws Exception {
        dao.save("ModuleMapper.deleteOperPrivilegeByModuleId", moduleid);
    }
}
